/*
 * Copyright (c) 2012 SUBSECRETARIA DEFENSORIA DEL ESPACIO PUBLICO - SDEP.
 * All Rights Reserved.
 * This software is the confidential and proprietary information of SDEP
 * Developed By CONSTULT-SOFT S.A, Development Team 2012.
 *
 */
package co.gov.medellin.sdep.sisdep.domain;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import co.gov.medellin.sdep.sisdep.admin.service.IConfiguracionService;
import co.gov.medellin.sdep.sisdep.common.AppConstants;
import co.gov.medellin.sdep.sisdep.exception.ConfiguracionException;
import co.gov.medellin.sdep.sisdep.exception.ConfiguracionRuntimeException;
import co.gov.medellin.sdep.sisdep.model.Configuracion;

/**
 * @author Usuario
 * 
 */
public class ConfiguracionController extends BaseController implements
		Serializable {

	/**
	 * generated serial version
	 */
	private static final long serialVersionUID = -3285110767384990403L;

	/**
	 * Constructor por defecto, inicializa los elemento basicos del Controlador
	 */
	public ConfiguracionController() {
		cleanSearchValues();
		cleanValues();
	}

	/** bean para el manejo del formulario de busqueda Configuracion */
	private Configuracion configuracionSearch = new Configuracion();

	/** Objeto contenedor del listado de Configuracion luego de una consulta. */
	private DataModel configuracionListModel;

	/** bean para el manejo del formulario de creacion/edicion. Configuracion */
	private Configuracion configuracion = new Configuracion();

	/** instancia de servicio configuracionService */
	private IConfiguracionService configuracionService;
	
	/** Notification message */
	private String notificationMessage;

	// --------------------------------------------------------------------
	// --- metodos para atender acciones init()
	// --------------------------------------------------------------------

	/**
	 * 
	 * @return String
	 */
	public String initState() {
		cleanSearchValues();
		cleanValues();
		return AppConstants.CONFIGURACION_INIT_VIEW;
	}
	/**
	 * 
	 * @return String
	 */
	public String searchConfiguracionByKey() {
		String msg = "";
		try {
			List valores = null;
			valores = getConfiguracionService().load(1, 10, 
					this.configuracionSearch);
			this.configuracionListModel.setWrappedData(valores);
		} catch (Exception e) {
			msg = e.getMessage();
			e.printStackTrace(System.err);
		}
		if (this.configuracionListModel.getWrappedData() == null) {
			if(msg.equals("")){
				msg = AppConstants.NO_RECORDS_FOUND;
			}
		} else {
			if (((List) this.configuracionListModel.getWrappedData()).isEmpty()) {
				msg = AppConstants.NO_RECORDS_FOUND;
			}
		}
		cleanSearchValues();
		((MessageModalWindowController) getBean("messageController"))
				.setSuccessMessage(msg, null, null);
		//setNotificationMessage(msg);
		return AppConstants.CONFIGURACION_SEARCH_VIEW;
	}

	/**
	 * 
	 * @return String
	 */
	public String searchConfiguracionByGrupo() {
		String msg = "";
		try {
			List valores = null;
			valores = getConfiguracionService().loadByGrupo(1, 10, 
					this.configuracionSearch);
			this.configuracionListModel.setWrappedData(valores);
		} catch (Exception e) {
			msg = e.getMessage();
			e.printStackTrace(System.err);
		}
		if (this.configuracionListModel.getWrappedData() == null) {
			if(msg.equals("")){
				msg = AppConstants.NO_RECORDS_FOUND;
			}
		} else {
			if (((List) this.configuracionListModel.getWrappedData()).isEmpty()) {
				msg = AppConstants.NO_RECORDS_FOUND;
			}
		}
		cleanSearchValues();
		((MessageModalWindowController) getBean("messageController"))
				.setSuccessMessage(msg, null, null);
		//setNotificationMessage(msg);
		return AppConstants.CONFIGURACION_SEARCH_VIEW;
	}
	
	public String searchConfiguracionByGrupoAndValor() {
		String msg = "";
		try {
			List valores = null;
			valores = getConfiguracionService().loadByGrupoAndValor(this.configuracionSearch.getGrupo(),this.configuracionSearch.getValor());
			this.configuracionListModel.setWrappedData(valores);
		} catch (Exception e) {
			msg = e.getMessage();
			e.printStackTrace(System.err);
		}
		if (this.configuracionListModel.getWrappedData() == null) {
			if(msg.equals("")){
				msg = AppConstants.NO_RECORDS_FOUND;
			}
		} else {
			if (((List) this.configuracionListModel.getWrappedData()).isEmpty()) {
				msg = AppConstants.NO_RECORDS_FOUND;
			}
		}
		cleanSearchValues();
		((MessageModalWindowController) getBean("messageController"))
				.setSuccessMessage(msg, null, null);
		//setNotificationMessage(msg);
		return AppConstants.CONFIGURACION_SEARCH_VIEW;
	}
	
	
	/**
	 * 
	 * @return
	 */
	public String create() {
		String msg = AppConstants.DEFAULT_ERROR;
		try {
			if (this.configuracion.getId().longValue() == 0L) {
				getConfiguracionService().insert(this.configuracion);
				msg = AppConstants.SUCCESS_CREATE;
			}
		} catch (ConfiguracionException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		} catch (ConfiguracionRuntimeException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		}
		cleanValues();
		((MessageModalWindowController) getBean("messageController"))
				.setSuccessMessage("- Configuraci\u00F3n " + msg, null, null);
		//setNotificationMessage("- Configuraci\u00F3n " + msg);
		return AppConstants.CONFIGURACION_SEARCH_VIEW;
	}

	/**
	 * 
	 * @return
	 */
	public String update() {
		String msg = AppConstants.DEFAULT_ERROR;
		try {
			if (this.configuracion.getId().longValue() != 0L) {
				getConfiguracionService().update(this.configuracion);
				msg = AppConstants.SUCCESS_UPDATE;
			}
		} catch (ConfiguracionException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		} catch (ConfiguracionRuntimeException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		}
		cleanValues();
		((MessageModalWindowController) getBean("messageController"))
				.setSuccessMessage("- Configuraci\u00F3n " + msg, null, null);
		//setNotificationMessage("- Configuraci\u00F3n " + msg);
		return AppConstants.CONFIGURACION_SEARCH_VIEW;
	}

	// --------------------------------------------------------------------
	// --- metodos para atender acciones end()
	// --------------------------------------------------------------------

	// --------------------------------------------------------------------
	// --- metodos para atender reglas de navegacion init()
	// --------------------------------------------------------------------

	/**
	 * 
	 */
	public String createConfiguracion() {
		configuracion = new Configuracion();
		cleanValues();
		return AppConstants.CONFIGURACION_CREATE_VIEW;
	}

	/**
	 * 
	 * @return
	 */
	public String updateConfiguracion() {
		Map params = getExternalContext().getRequestParameterMap();
		String configuracionDataIndex = (String) params
				.get("configuracionDataIndex");
		this.configuracion = (Configuracion) ((List) this.configuracionListModel
				.getWrappedData())
				.get(Integer.parseInt(configuracionDataIndex));
		cleanSearchValues();
		return AppConstants.CONFIGURACION_UPDATE_VIEW;
	}

	/**
	 *
	 * @return
	 */
	public String cancelConfiguracion() {
		cleanSearchValues();
		return AppConstants.CONFIGURACION_SEARCH_VIEW;
	}

	/**
	 *
	 * @return
	 */
	public String cancelConfiguracionOpcion() {
		cleanValues();
		cleanSearchValues();
		return AppConstants.CONFIGURACION_SEARCH_VIEW;
	}

	/**
	 * limpia el contenido de los valores que se ingresan para buscar
	 */
	public final void cleanSearchValues(){
		configuracionSearch.setGrupo("");
		configuracionSearch.setParametro("");
		configuracionSearch.setDescripcion("");
		configuracionSearch.setEstado("");
		setNotificationMessage("");
		((MessageModalWindowController) getBean("messageController"))
		.clearMessage();
	}

	/**
	 * limpia el contenido de los valores que se ingresan (Create, Update)
	 */
	public final void cleanValues(){
		configuracion.setId(new Long(0L));
		configuracion.setGrupo("");
		configuracion.setParametro("");
		configuracion.setValor("");
		configuracion.setDescripcion("");
		configuracion.setModificable("");
		configuracion.setEstado("");
		this.configuracionListModel = new ListDataModel();
	}

	// --------------------------------------------------------------------
	// --- metodos para atender reglas de navegacion end()
	// --------------------------------------------------------------------

	// --------------------------------------------------------------------
	// --- getters and setters init()
	// --------------------------------------------------------------------

	/**
	 * 
	 */
	public Configuracion getConfiguracionSearch() {
		return configuracionSearch;
	}

	/**
	 * 
	 * @param configuracionSearch
	 */
	public void setconfiguracionSearch(Configuracion configuracionSearch) {
		this.configuracionSearch = configuracionSearch;
	}

	/**
	 * 
	 * @return
	 */
	public DataModel getconfiguracionListModel() {
		return configuracionListModel;
	}

	/**
	 * 
	 * @param configuracionListModel
	 */
	public void setconfiguracionListModel(DataModel configuracionListModel) {
		this.configuracionListModel = configuracionListModel;
	}

	/**
	 * 
	 * @return
	 */
	public Configuracion getConfiguracion() {
		return configuracion;
	}

	/**
	 * 
	 * @param configuracion
	 */
	public void setconfiguracion(Configuracion configuracion) {
		this.configuracion = configuracion;
	}

	/**
	 * obtencion del servicio configuracionService
	 * 
	 * @return
	 */
	public IConfiguracionService getConfiguracionService() {
		return configuracionService;
	}

	/**
	 * establecimiento del servicio configuracionService, la inyeccion de la
	 * dependencia la cubre SpringFramework
	 * 
	 * @param configuracionService
	 */
	public void setConfiguracionService(
			IConfiguracionService configuracionService) {
		this.configuracionService = configuracionService;
	}

	// --------------------------------------------------------------------
	// --- getters and setters end()
	// --------------------------------------------------------------------

	// --------------------------------------------------------------------
	// --- mensajes para popUp modal init()
	// --------------------------------------------------------------------

	public String getNotificationMessage() {
		return notificationMessage;
	}

	public void setNotificationMessage(String notificationMessage) {
		this.notificationMessage = notificationMessage;
	}
    
	// --------------------------------------------------------------------
	// --- mensajes para popUp modal end()
	// --------------------------------------------------------------------

}
